The Session Initiation Protocol (SIP) is a text-based protocol specified by the Internet Engineering Task Force (IETF) in RFC 3261, similar to Hypertext Transfer Protocol (HTTP) and Simple Mail Transfer Protocol (SMTP), for initiating interactive communication sessions between users. Such sessions include voice, video, chat, interactive games, and virtual reality. A key objective in the development of SIP was simplicity and the reuse of existing Internet mechanisms. Not only is SIP text based (where individual characters are encoded using the 8-bit UCS/Unicode Transformation Format (UTF-8) character set), at least the header portions of SIP messages are essentially human readable to simplify the message creation and debugging processes.
SIP messages are handled by SIP agents. A SIP agent may be present at a user terminal or at a network-based node, in particular at SIP proxies and SIP Application Servers (ASs). A particular SIP agent receiving a SIP message might in some cases only need to look at one or a small number of fields within a SIP message in order to handle a message, for example it may only need to look at the “To” field which contains a destination SIP address.
The human readable format of SIP message headers makes the parsing of messages at network nodes incorporating a SIP agent, a computationally difficult process. Parsing involves searching and interpreting the header for particular text strings, e.g. in order to identify the address or Universal Resource Identifier (URI) of the called party (e.g. “sip:bob@biloxi.com”). The problem is compounded by the fact that SIP does not specify a field order within the SIP header. Parsing is a particular problem in communication networks such as the IP Multimedia Subsystem (IMS) specified by 3GPP for the provision of multimedia services to mobile subscribers, where a message may pass though a large number of SIP nodes and be parsed separately at each, e.g. at a Call Session Control Function (CSCF) or SIP Application Server (AS). On some occasions it may even be necessary to parse a message multiple times within the same node (e.g. at different components within the node). This could be the case, for example, where multiple SIP servlets within multiple application server instances are deployed at the same node. It might also be the case when a SIP agent is implemented using components written in different programming languages (e.g. C++ and Java), so that the components cannot reuse each others parsing result. This could easily happen when third party software is used, or during other integration activities. In any case, the computational overhead introduced by handling messages within the SIP stack can be considerable, giving rise to resource problems particularly at nodes handling a high volume of SIP message traffic.